package com.weimob.mcloud.wechatwork.customer.service.user.service;

import com.weimob.mcloud.wechatwork.customer.service.user.module.bo.tag.CustomerMarkTagFailBO;
import com.weimob.mcloud.wechatwork.customer.service.user.module.bo.tag.MarkTagInfoBO;
import com.weimob.mcloud.wechatwork.customer.service.user.module.bo.tag.TagBO;
import com.weimob.mcloud.wechatwork.customer.service.user.module.bo.tag.TagItemBO;
import com.weimob.mcloud.wechatwork.customer.service.user.module.dto.customer.ExternalUserInfoFindDTO;
import com.weimob.mcloud.wechatwork.customer.service.user.module.dto.customer.MarkTagInfoDTO;
import com.weimob.mcloud.wechatwork.customer.service.user.module.dto.tag.CustomerTagDTO;
import com.weimob.mcloud.wechatwork.customer.service.user.module.msgBody.CorpCustomerTagChangeBody;
import com.weimob.mcloud.wechatwork.customer.service.user.module.msgBody.TagChangeBody;
import com.weimob.mcloud.wechatwork.customer.service.user.module.req.tag.CustomerTagQueryDTO;
import com.weimob.mcloud.wechatwork.customer.service.user.module.req.tag.MarkTagDTO;
import com.weimob.mcloud.wechatwork.customer.service.user.module.req.tag.TagQueryDTO;
import com.weimob.soa.common.response.SoaResponse;

import java.util.List;

/**
 * @author junlong.lv
 * @version 1.0
 * @date 2021/10/25 10:16 上午
 */
public interface TagClient {

    /**
     * 给客户打标
     * 打标签/移除标签
     * @param markTagBOReq
     * @return
     */
    SoaResponse<Boolean, ?> markTag(MarkTagDTO markTagBOReq);


    /**
     * 查询产品实例id下的所有标签
     * @param tagQueryBOReq
     * @return
     */
    SoaResponse<TagItemBO, ?> queryTagByProductInstanceId(TagQueryDTO tagQueryBOReq);

    /**
     * 查询客户标签
     * @param customerTagQueryDTO
     * @return
     */
    SoaResponse<List<TagBO>, ?> queryCustomerTag(CustomerTagQueryDTO customerTagQueryDTO);

    /**
     * 添加客户标签
     * 必须交验删除
     * 1、校验客户不能为空
     * 2、员工可以为空串，因为有些渠道打的标签是拿不到员工id的
     * 3、校验标签不能为空
     * 4、校验标签组不能为空
     * @param customerTagDTO
     * @return
     */
    SoaResponse<Boolean, ?> addCustomerTag(CustomerTagDTO customerTagDTO);

    /**
     * 移除客户标签
     * 移除客户标签不需要校验线束
     * 可以根据一下条件删除
     * 1、根据标签删除
     * 2、根据标签组删除
     * 3、根据员工删除
     * 4、根据客户删除
     * @return
     */
    SoaResponse<Boolean, ?> removeCustomerTag(CustomerTagDTO customerTagDTO);

    SoaResponse<Boolean, ?> sendTagChangeMsg(TagChangeBody tagChangeBody);

    SoaResponse<Boolean, ?> sendCorpCustomerTagChangeBody(CorpCustomerTagChangeBody corpCustomerTagChangeBody);

    SoaResponse<Boolean, Void> batchMarkTag(ExternalUserInfoFindDTO externalUserInfoListDTO);

    SoaResponse<Boolean, Void> batchRemoveTag(ExternalUserInfoFindDTO externalUserInfoListDTO);

    SoaResponse<MarkTagInfoBO, Void> queryMarkTagInfo(MarkTagInfoDTO markTagInfoDTO);

    SoaResponse<Boolean, Void> readMarkTagInfo(MarkTagInfoDTO MarkTagInfoDTO);

    SoaResponse<Boolean, Void> exportMarkTagFail(MarkTagInfoDTO markTagInfoDTO);

    SoaResponse<Long, Void> count(MarkTagInfoDTO markTagInfoDTO);

    SoaResponse<List<CustomerMarkTagFailBO>, Void> queryMarkTagFailInfoExport(MarkTagInfoDTO markTagInfoDTO);
}
